<?php

/**
 * Description of UsuarioServicios
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class UsuarioServicios extends Servicios
{

  function agregarUsuario($UsuarioDTO)
  {
    $repo = new RepoUsuario();
    return $repo->agregar($this->deDTO($UsuarioDTO));
  }

  function modificarClave($clave)
  {
    $repo = new RepoUsuario();
    return $repo->modificarClave($this->ObtenerIdUsuarioSesion(), $clave);
  }
  function modificarUsuario($UsuarioDTO)
  {
    $repo = new RepoUsuario();
    return $repo->modificar($this->deDTO($UsuarioDTO));
  }

  function buscar($id)
  {

    $repo = new RepoUsuario();
    $usuario = $repo->buscar($id);
    return $this->aDTO($usuario);
  }

  function listarUsuarios()
  {
    $repo = new RepoUsuario();
    $usuarios = $repo->listar();
    $UsuarioDTO = null;
    foreach ($usuarios as $usuario)
    {
      $UsuarioDTO[] = $this->aDTO($usuario);
    }
    return $UsuarioDTO;
  }

  function aDTO(Usuario $usuario)
  {
    $usuarioDTO = new UsuarioDTO();
    $usuarioDTO->setApellido($usuario->getApellido());
    $usuarioDTO->setClave($usuario->getClave());
    $usuarioDTO->setId($usuario->getId());
    $usuarioDTO->setNombre($usuario->getNombre());
    $usuarioDTO->setNombreUsuario($usuario->getNombreUsuario());
    $usuarioDTO->setUsuario($usuario->getUsuario());
    if (is_array($usuario->getGrupos()))
    {
      $grupoServicios = new GrupoServicios();
      foreach ($usuario->getGrupos() as $grupo)
      {
        $gruposDTO[] = $grupoServicios->aDTO($grupo);
      }
      $usuarioDTO->setGrupos($gruposDTO);
    }
    return $usuarioDTO;
  }

  function deDTO(UsuarioDTO $usuarioDTO)
  {
    $usuario = new Usuario();
    $usuario->setApellido($usuarioDTO->getApellido());
    $usuario->setClave($usuarioDTO->getClave());
    $usuario->setId($usuarioDTO->getId());
    $usuario->setNombre($usuarioDTO->getNombre());
    $usuario->setNombreUsuario($usuarioDTO->getNombreUsuario());
    $usuario->setGrupos($usuarioDTO->getGrupos());
    $usuario->setUsuario($usuarioDTO->getUsuario());
    return $usuario;
  }

  function buscarUsuarioPorUserYPass($user, $pass)
  {
    $repo = new RepoUsuario();
    $repoPt = new RepoPermisoTemporal();
    $link = $repo->OpenDB();
    if ($pass != "" && $this->validarUsuarioAD($user, $pass))
    {
      $_SESSION["usuarioDominio"] = true;
      $datos = $repo->GetTableDataByWhere($repo->tabla, "nombreUsuario = '" . $user . "'");
    } else
    {
      $datos = $repo->GetTableDataByWhere($repo->tabla, "nombreUsuario = '" . $user . "' AND clave = '" . md5($pass) . "'");
    }
    if ($datos != false)
    {
      if (count($datos) > 0)
      {
        $usuarioDto = new UsuarioDTO();
        $usuarioDto->setApellido($datos[0]->apellido);
        $usuarioDto->setClave($datos[0]->clave);
        $usuarioDto->setNombre($datos[0]->nombre);
        $usuarioDto->setNombreUsuario($datos[0]->nombreUsuario);
        $usuarioDto->setId($datos[0]->idUsuario);

        $datosGrupo = $repo->GetTableDataByWhere('usuario_grupo', "usuario = '" . $datos[0]->idUsuario . "'");
        $k = 0;
        $arrayGrupos = Array();
        if (count($datosGrupo) > 0)
        {
          $grupoServicios = new GrupoServicios();
          for ($i = 0; $i < count($datosGrupo); $i++)
          {
            $grupo = new Grupo();
            $grupo = $grupoServicios->buscar($datosGrupo[$i]->grupo);
            $arrayGrupos[$k] = $grupo;
            $k++;
          }
        } else
        {
          
        }
        // permisos temporales
        $l = $repo->OpenDB();
        $fechaHoy = new DateTime();
        $fecha = $fechaHoy->format("Y") . "-" . $fechaHoy->format("m") . "-" . $fechaHoy->format("d"); 
        $hora = $fechaHoy->format("H");
        $datosGrupoTemporal = mssql_query("select * from permiso_temporal where usuarioAsignado = '" . $datos[0]->idUsuario . "' and fecha = '". $repo->SqlDate($fecha)."' and " . $hora . ">= horaDesde and " . $hora . " <= horaHasta", $l);
        if (mssql_num_rows($datosGrupoTemporal) > 0)
        {
          $grupoServicios = new GrupoServicios();
          for ($i = 0; $i < mssql_num_rows($datosGrupoTemporal); $i++)
          {
            $grupo = new Grupo();
            $grupo = $grupoServicios->buscar(mssql_result($datosGrupoTemporal,$i,'grupo'));
            $arrayGrupos[$k] = $grupo;
            $k++;
          }
        }
        $usuarioDto->setGrupos($arrayGrupos);
        return $usuarioDto;
      }
    }
    return null;
  }

  function eliminar($id)
  {
    $repoUsuario = new RepoUsuario();
    return $repoUsuario->eliminar($id);
  }

  function validarUsuarioAD($user, $pass)
  {
     return false;
    $ldap_username = $user . DOMAIN;

// Se conecta a LDAP
    $ldap = ldap_connect(LDAP_SERVER, LDAP_PORT);
// Se verifica si es usuario de LDAP
    $ldap_bind = ldap_bind($ldap, $ldap_username, $pass);
    ldap_unbind($ldap);
    return $ldap_bind;
  }

}

?>
